<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <script src="https://www.layuicdn.com/layui/layui.js"></script>
    <!-- 注意：如果你直接复制所有代码到本地，上述css路径需要改成你本地的 -->
</head>

<body>

<div class="demoTable">
    搜一搜：
    <div class="layui-inline">
        <input class="layui-input" name="id" id="demoReload" autocomplete="off">
    </div>
    <button class="layui-btn" data-type="reload">搜索</button>
</div>

<table class="layui-hide" id="test" lay-filter="test"></table>

<script type="text/html" id="switchTpl">
    <!-- 这里的 checked 的状态只是演示 -->
    <input type="checkbox" name="allowComment" value="{{d.id}}" lay-skin="switch" lay-text="Yes|No"
           lay-filter="isAllowComment" {{ d.id== 10003 ? '' : 'checked' }}>
</script>


<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
        <button class="layui-btn layui-btn-sm" lay-event="deleteAll">删除选中</button>
    </div>
</script>


<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.js"></script>
<link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui/css/layui.css" />
<!-- 注意：如果你直接复制所有代码到本地，上述js路径需要改成你本地的 -->

<script>

    layui.use('table', function () {
        form = layui.form;
        var table = layui.table;
        //温馨提示：默认由前端自动合计当前行数据。从 layui 2.5.6 开始： 若接口直接返回了合计行数据，则优先读取接口合计行数据。
        //详见：https://www.layui.com/doc/modules/table.html#totalRow
        var tableIns = table.render({
            elem: '#test'
            , url: 'http://localhost:8088/articlems/article/list'
            , toolbar: '#toolbarDemo'
            , title: '用户数据表'
            , totalRow: true
            , cols: [
                [
                    {type: 'checkbox', fixed: 'left'}
                    , {
                    field: 'id',
                    title: 'ID',
                    width: 80,
                    fixed: 'left',
                    unresize: true,
                    sort: true,
                    totalRowText: '合计'
                }
                    , {
                    field: 'title',
                    title: '文章标题',
                    width: '15%',
                    event: 'setTitle',
                    style: 'cursor: pointer;',
                    templet: '#usernameTpl'
                }
                    , {field: 'content', title: '文章具体内容', width: '10%', event: 'setSign', style: 'cursor: pointer;'}
                    , {field: 'created', title: '发表时间', width: 80, width: '9%', sort: true}
                    , {field: 'modified', title: '修改时间', width: 80, width: '9%', sort: true}
                    , {field: 'categories', title: '文章分类', width: 100, sort: true, edit: 'text'}
                    , {field: 'tags', title: '文章标签', width: '15%', event: 'setTags', style: 'cursor: pointer;'}
                    , {field: 'allowComment', title: '是否允许评论', width: 85, templet: '#switchTpl', unresize: true}
                    , {field: 'thumbnail', title: '文章缩略图', width: 120}
                ]
            ]
            , id: 'testReload'
            , page: true
        });

        //工具栏事件
        table.on('toolbar(test)', function (obj) {
            var checkStatus = table.checkStatus(obj.config.id);
            switch (obj.event) {
                case 'getCheckData':
                    var data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('选中了：' + data.length + ' 个');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全选' : '未全选')
                    break;
                case 'deleteAll':
                    var data01 = checkStatus.data;
                    console.log(data01);

                    axios.post('http://localhost:8088/articlems/article/delete', {
                        data: data01
                    }).then(resp => {
                        if (resp.code = 300) {
                            layer.alert('删除成功');
                            //执行重载
                            tableIns.reload('testReload', {
                                page: {
                                    curr: 1 //重新从第 1 页开始
                                }
                            }, 'data');

                        }
                    }).catch(error => {
                        layer.alert('删除失败');
                        //执行重载
                        tableIns.reload('testReload', {
                            page: {
                                curr: 1 //重新从第 1 页开始
                            }
                        }, 'data');
                    });
            }
            ;
        });
        //          搜索
        var $ = layui.$, active = {
            reload: function () {
                var demoReload = $('#demoReload');

                //执行重载
                table.reload('testReload', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    }
                    , where: {
                        keyword: demoReload.val()
                    }
                }, 'data');
            }
        };

        $('.demoTable .layui-btn').on('click', function () {
            var type = $(this).data('type');
            active[type] ? active[type].call(this) : '';
        });


        //监听单元格事件
        table.on('tool(test)', function (obj) {
            var data = obj.data;
            if (obj.event === 'setSign') {
                layer.prompt({
                    formType: 2
                    , title: '修改 用户ID 为 [' + data.id + '] 的文章'
                    , value: data.content
                }, function (value, index) {
                    layer.close(index);

                    //这里一般是发送修改的Ajax请求
                    axios.post('http://localhost:8088/articlems/article/update/',
                        {
                            "id": data.id,
                            "content": value,
                        })
                        .then(resp => {
                            if (resp.code = 300) {
                                layer.alert("文章id为" + JSON.stringify(data.id) + '更新成功')
                                layer.close(index);
                            }
                        })
                        .catch(error => {
                            if (resp.code = 400) {
                                layer.alert("文章id为：" + JSON.stringify(data.id) + '更新失败')
                                layer.close(index);
                            }
                        });

                    //同步更新表格和缓存对应的值
                    obj.update({
                        content: value
                    });
                });
            } else if (obj.event === 'setTitle') {
                layer.prompt({
                    formType: 2
                    , title: '修改 用户ID 为 [' + data.id + '] 的标题'
                    , value: data.title
                }, function (value, index) {

                    console.log(value);

                    layer.close(index);

                    //这里一般是发送修改的Ajax请求
                    axios.post('http://localhost:8088/articlems/article/update/',
                        {
                            "id": data.id,
                            "title": value,
                        })
                        .then(resp => {
                            if (resp.code = 300) {
                                layer.alert("文章id为" + JSON.stringify(data.id) + '更新成功')
                                layer.close(index);
                            }
                        })
                        .catch(error => {
                            if (resp.code = 400) {
                                layer.alert("文章id为：" + JSON.stringify(data.id) + '更新失败')
                                layer.close(index);
                            }
                        });

                    //同步更新表格和缓存对应的值
                    obj.update({
                        title: value
                    });
                });

            } else if (obj.event === 'setTags') {
                layer.prompt({
                    formType: 2
                    , title: '修改 用户ID 为 [' + data.id + '] 的标签'
                    , value: data.tags
                }, function (value, index) {
                    layer.close(index);

                    //这里一般是发送修改的Ajax请求
                    axios.post('http://localhost:8088/articlems/article/update/',
                        {
                            "id": data.id,
                            "tags": value,
                        })
                        .then(resp => {
                            if (resp.code = 300) {
                                layer.alert("文章id为" + JSON.stringify(data.id) + '更新成功')
                                layer.close(index);
                            }
                        })
                        .catch(error => {
                            if (resp.code = 400) {
                                layer.alert("文章id为：" + JSON.stringify(data.id) + '更新失败')
                                layer.close(index);
                            }
                        });

                    //同步更新表格和缓存对应的值
                    obj.update({
                        tags: value
                    });
                });

            }
            ;
        });


        //监听行单击事件（双击事件为：rowDouble）
        table.on('rowDouble(test)', function (obj) {


            var data = obj.data;

            layer.alert(JSON.stringify(data), {
                title: '当前行数据：'
            });

            //标注选中样式
            obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
        });


        //监听是否允许评论操作
        form.on('switch(isAllowComment)', function (obj) {
            layer.tips(this.value + ' ' + this.name + '：' + obj.elem.checked, obj.othis);
            console.log(this.value)

            //这里一般是发送修改的Ajax请求
            axios.post('http://localhost:8088/articlems/article/update/',
                {
                    "id": this.value,
                    "allowComment": obj.elem.checked,
                })
        });

    });
</script>
<script type="text/html" id="usernameTpl">
    <a class="layui-table-link">{{ d.title }}</a>


</script>

</body>

</html>
